package com.flyu.myThread.StaticProxy;

/*
静态代理模式
真实对象和代理对象都实现同一个接口
代理对象要代理真实角色

优点：
    1. 代理对象可以做真实对象不能做的事情
    2. 真实对象可以专注自己的事情
 */

public class TestStaticProxy {
    public static void main(String[] args) {
        You you = new You();
        new Thread( ()-> System.out.println("我爱你")).start();

        new WeddingCompany(you).HappyMarry();
    }
}

// 接口
interface Marry{
    void HappyMarry();
}

class You implements Marry{

    @Override
    public void HappyMarry() {
        System.out.println("小陈要结婚了，超开心");
    }
}


class WeddingCompany implements Marry{

    private Marry target;

    public WeddingCompany(Marry target){
        this.target = target;
    }

    @Override
    public void HappyMarry() {
        before();
        this.target.HappyMarry();
        after();
    }

    private void after() {
        System.out.println("结婚之后，收尾款");
    }

    private void before() {
        System.out.println("结婚之前，布置现场");
    }
}